package com.ilancuo.enuum;

import java.util.EnumMap;
import java.util.EnumSet;

/**
 * 枚举类型遍历、EnumMap、EnumSet的使用
 * Created by ilancuo on 2018/4/8.
 */
public class EnumTest {

    public enum Light {
        RED(1), YELLOW(2), GREEN(3);

        private int index;

        private Light(int index) {
            this.index = index;
        }

        @Override
        public String toString() {
            return String.valueOf(this.index);
        }
    }

    public static void main(String[] args) {
        System.out.println("演示枚举类型的遍历...");
        testTraversalEnum();
        System.out.println("演示 EnumMap 对象的使用和遍历.....");
        testEnumMap();
        System.out.println("演示 EnumSet 对象的使用和遍历.....");
        testEnumSet();
    }

    /**
     * 枚举类型的遍历
     */
    private static void testTraversalEnum() {
        Light[] allLights = Light.values();
        for (Light light : allLights) {
            System.out.println("name: " + light.name() + ", ordinal: " + light.ordinal() + " " + light);
        }
    }

    /**
     * EnumMap 的使用，EnumMap 跟 HashMap 的使用差不多，只不过 key 要是枚举类型
     */
    private static void testEnumMap() {
        EnumMap<Light, String> enumMap = new EnumMap<>(Light.class);
        enumMap.put(Light.RED, "红灯");
        enumMap.put(Light.YELLOW, "黄灯");
        enumMap.put(Light.GREEN, "绿灯");
        for (Light light : Light.values()) {
            System.out.println("[name = " + light.name() + ", value = " + enumMap.get(light) + "]");
        }
    }

    /**
     * 演示 EnumSet 如何使用，EnumSet 是一个抽象类，获取一个类型的枚举类型内容可以使用 allOf() 方法
     */
    private static void testEnumSet() {
        EnumSet<Light> enumSet = EnumSet.allOf(Light.class);
        for (Light light : enumSet)
            System.out.println("当前 EnumSet 中的数据为：" + light);
    }
}
